const promise_state = {
    pending: 0
    , fulfilled: 1
    , rejected: 2
}
class newPromise {
    // 需要一个变量用来存储Promise结果
    #result
    // 创建一个变量来记录Promise的状态,以防止被再次输入变量...导致改变

    #state = promise_state.pending // pending 0 fulfilled 1 rejected 2
    // executor 形参
    constructor(executor) {
        // 通过this来进行引用方法
        executor(this.#resolve, this.#reject)//调用回调函数
    }
    // 设置为私有方法,只有在内部的时候才能访问
    // 用来存储成功的数据
    // value 值/数据
    /* #resolve(value) {
        // 用来存储 拒绝的数据或者报错的.
        // 但这时,this是一个Undefined,因为在严格模式下,用函数调用的this 就是Undefined.
        // 可以利用箭头函数去解决
        this.#result = value
    } */

    /* 
    使用箭头函数添加方法,是把方法添加到实例去的,而普通的类方法添加则会把方法添加到原型中,是通过原型去调用的方法.
    */
    #resolve = (value) => {
        // 禁止值被修改,如果state不等于0说明已经被修改了,让函数直接返回
        if (this.#state !== promise_state.pending) return
        this.#result = value
        this.#state = promise_state.fulfilled //表示数据填充成功了
    }
    // reason 原因.
    #reject(reason) { }
    // 添加then方法
    then(onFulfilled, onRejected) {
        if (this.#state === promise_state.fulfilled ) {
            onFulfilled(this.#result)
        }
    }

}
// resolve等等,这个是实参
const mp = new newPromise((resolve, reject) => {
    setTimeout(() => {
        resolve("GG")
    }, 1000)
})
console.log(mp);
mp.then((result) => {
    console.log("读取数据", result);
})